Skip to content

18.3 Computer Use Demo:桌面控制能力

项目定位:Anthropic 官方的 Computer Use 参考实现,展示 Claude 如何通过视觉理解和工具调用控制桌面环境。这是 Claude 独有的能力,其他 LLM 暂不支持。


1. 项目概述

1.1 什么是 Computer Use?

Computer Use 是 Claude 的一项革命性能力,允许 AI 像人类一样操作计算机:

传统 LLM:
用户 → 文字输入 → AI 处理 → 文字输出

Computer Use:
用户 → 任务描述 → Claude 看屏幕 → 移动鼠标 → 点击/输入 → 完成任务

1.2 支持的模型

模型版本能力等级
Claude Opus 4.5claude-opus-4-5-20251101最强
Claude Sonnet 4.5claude-sonnet-4-5-20250929推荐
Claude Sonnet 4claude-sonnet-4-20250514良好
Claude Opus 4claude-opus-4-20250514良好
Claude Haiku 4.5claude-haiku-4-5-20251001基础

1.3 核心组件

┌─────────────────────────────────────────────────────────────────┐
│                    Computer Use Demo 架构                        │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │                   Docker Container                         │  │
│  │                                                            │  │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐        │  │
│  │  │ Streamlit   │  │   Agent     │  │  Desktop    │        │  │
│  │  │ Web UI      │  │   Loop      │  │  Environment│        │  │
│  │  │ (8501)      │  │ (Python)    │  │  (XVFB)     │        │  │
│  │  └─────────────┘  └─────────────┘  └─────────────┘        │  │
│  │         │                │                │                │  │
│  │         │         ┌──────▼──────┐         │                │  │
│  │         │         │ Claude API  │         │                │  │
│  │         │         │ / Bedrock   │         │                │  │
│  │         │         │ / Vertex AI │         │                │  │
│  │         │         └─────────────┘         │                │  │
│  │         │                                 │                │  │
│  │         └────────────────┬────────────────┘                │  │
│  │                          │                                 │  │
│  │                   ┌──────▼──────┐                          │  │
│  │                   │  VNC Server │                          │  │
│  │                   │  (5900)     │                          │  │
│  │                   └─────────────┘                          │  │
│  │                          │                                 │  │
│  └──────────────────────────┼─────────────────────────────────┘  │
│                             │                                    │
│                      ┌──────▼──────┐                             │
│                      │   NoVNC     │                             │
│                      │   (6080)    │                             │
│                      └─────────────┘                             │
│                             │                                    │
└─────────────────────────────┼────────────────────────────────────┘


                      浏览器访问桌面

2. 快速开始

2.1 使用 Claude API

bash
# 设置 API Key
export ANTHROPIC_API_KEY=your_api_key

# 运行 Docker 容器
docker run \
  -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
  -v $HOME/.anthropic:/home/computeruse/.anthropic \
  -p 5900:5900 \
  -p 8501:8501 \
  -p 6080:6080 \
  -p 8080:8080 \
  -it ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest

2.2 使用 AWS Bedrock

bash
# 设置 AWS 配置
export AWS_PROFILE=your_profile

# 运行容器
docker run \
  -e API_PROVIDER=bedrock \
  -e AWS_PROFILE=$AWS_PROFILE \
  -e AWS_REGION=us-west-2 \
  -v $HOME/.aws:/home/computeruse/.aws \
  -v $HOME/.anthropic:/home/computeruse/.anthropic \
  -p 5900:5900 \
  -p 8501:8501 \
  -p 6080:6080 \
  -p 8080:8080 \
  -it ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest

2.3 使用 Google Vertex AI

bash
# 本地构建镜像
docker build . -t computer-use-demo

# 登录 Google Cloud
gcloud auth application-default login

# 设置变量
export VERTEX_REGION=us-central1
export VERTEX_PROJECT_ID=your_project_id

# 运行容器
docker run \
  -e API_PROVIDER=vertex \
  -e CLOUD_ML_REGION=$VERTEX_REGION \
  -e ANTHROPIC_VERTEX_PROJECT_ID=$VERTEX_PROJECT_ID \
  -v $HOME/.config/gcloud/application_default_credentials.json:/home/computeruse/.config/gcloud/application_default_credentials.json \
  -p 5900:5900 \
  -p 8501:8501 \
  -p 6080:6080 \
  -p 8080:8080 \
  -it computer-use-demo

2.4 访问界面

端口用途URL
8080综合界面(推荐)http://localhost:8080
8501Streamlit 聊天界面http://localhost:8501
6080NoVNC 桌面视图http://localhost:6080/vnc.html
5900VNC 直连vnc://localhost:5900

3. 核心工具详解

3.1 Computer Tool

Claude 可以使用以下桌面操作工具:

python
# 工具定义(简化版)
computer_tool = {
    "type": "computer_20251124",  # 最新版本
    "name": "computer",
    "display_width_px": 1024,
    "display_height_px": 768,
    "display_number": 1,
}

3.2 支持的操作

操作类型动作参数
鼠标mouse_movex, y 坐标
left_click
right_click
double_click
left_click_dragstart_x, start_y, end_x, end_y
键盘type文本内容
key按键名(如 "Return", "ctrl+c")
屏幕screenshot
cursor_position

3.3 Agent 循环流程

┌─────────────────────────────────────────────────────────────────┐
│                      Agent Loop 流程                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌─────────────┐                                                │
│  │ 用户输入任务 │                                                │
│  └──────┬──────┘                                                │
│         │                                                        │
│         ▼                                                        │
│  ┌─────────────┐     ┌─────────────┐                            │
│  │  截取屏幕   │ ──▶ │ 发送给Claude│                            │
│  └─────────────┘     └──────┬──────┘                            │
│                             │                                    │
│                             ▼                                    │
│                      ┌─────────────┐                            │
│                      │ Claude 分析 │                            │
│                      │ • 理解屏幕  │                            │
│                      │ • 规划动作  │                            │
│                      └──────┬──────┘                            │
│                             │                                    │
│         ┌───────────────────┼───────────────────┐               │
│         │                   │                   │               │
│         ▼                   ▼                   ▼               │
│  ┌─────────────┐     ┌─────────────┐     ┌─────────────┐       │
│  │  工具调用   │     │  文本回复   │     │  任务完成   │       │
│  │ (mouse/key) │     │             │     │             │       │
│  └──────┬──────┘     └─────────────┘     └─────────────┘       │
│         │                                                        │
│         ▼                                                        │
│  ┌─────────────┐                                                │
│  │  执行动作   │                                                │
│  └──────┬──────┘                                                │
│         │                                                        │
│         └──────────────────────────────────────────────────────┐│
│                                                                ││
│  ┌─────────────┐                                               ││
│  │ 截取新屏幕  │ ◀─────────────────────────────────────────────┘│
│  └──────┬──────┘                                                │
│         │                                                        │
│         └──────▶ 继续循环直到任务完成                            │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

4. 代码实现分析

4.1 项目结构

computer-use-demo/
├── computer_use_demo/        # 主 Python 模块
│   ├── __init__.py
│   ├── loop.py              # Agent 循环核心逻辑
│   ├── streamlit.py         # Streamlit UI
│   └── tools/
│       ├── base.py          # 工具基类
│       ├── computer.py      # 桌面控制工具
│       └── bash.py          # Bash 命令工具
├── image/                    # 图像处理工具
├── tests/                    # 测试用例
├── Dockerfile               # 容器定义
├── pyproject.toml           # 项目配置
├── setup.sh                 # 开发环境设置
└── README.md

4.2 Agent Loop 核心代码

python
# computer_use_demo/loop.py(简化版)

import anthropic
from .tools.computer import ComputerTool
from .tools.bash import BashTool

class ComputerUseAgent:
    def __init__(self, model: str = "claude-sonnet-4-5-20250929"):
        self.client = anthropic.Anthropic()
        self.model = model
        self.tools = [
            ComputerTool(),
            BashTool(),
        ]

    async def run(self, task: str):
        messages = [{"role": "user", "content": task}]

        while True:
            # 截取当前屏幕
            screenshot = await self.take_screenshot()

            # 调用 Claude API
            response = self.client.messages.create(
                model=self.model,
                max_tokens=4096,
                system=self.system_prompt,
                messages=messages,
                tools=[t.to_params() for t in self.tools],
            )

            # 处理响应
            if response.stop_reason == "tool_use":
                # 执行工具调用
                for block in response.content:
                    if block.type == "tool_use":
                        result = await self.execute_tool(
                            block.name,
                            block.input
                        )
                        messages.append({
                            "role": "assistant",
                            "content": response.content
                        })
                        messages.append({
                            "role": "user",
                            "content": [{
                                "type": "tool_result",
                                "tool_use_id": block.id,
                                "content": result
                            }]
                        })
            else:
                # 任务完成或需要用户输入
                return response.content

4.3 屏幕截图与坐标缩放

高分辨率屏幕需要缩放以适配 API:

python
# computer_use_demo/tools/computer.py

class ComputerTool:
    # 推荐分辨率(模型性能最佳)
    RECOMMENDED_WIDTH = 1024
    RECOMMENDED_HEIGHT = 768

    def __init__(self, display_width: int = 1920, display_height: int = 1080):
        self.display_width = display_width
        self.display_height = display_height

        # 计算缩放比例
        self.scale_x = display_width / self.RECOMMENDED_WIDTH
        self.scale_y = display_height / self.RECOMMENDED_HEIGHT

    def scale_coordinates(self, x: int, y: int) -> tuple[int, int]:
        """将模型输出的坐标转换为实际屏幕坐标"""
        return (
            int(x * self.scale_x),
            int(y * self.scale_y)
        )

    async def screenshot(self) -> str:
        """截取屏幕并缩放到推荐分辨率"""
        import subprocess
        import base64
        from PIL import Image
        import io

        # 截取原始屏幕
        result = subprocess.run(
            ["scrot", "-o", "/tmp/screenshot.png"],
            capture_output=True
        )

        # 缩放到推荐分辨率
        img = Image.open("/tmp/screenshot.png")
        img = img.resize(
            (self.RECOMMENDED_WIDTH, self.RECOMMENDED_HEIGHT),
            Image.LANCZOS
        )

        # 转换为 base64
        buffer = io.BytesIO()
        img.save(buffer, format="PNG")
        return base64.b64encode(buffer.getvalue()).decode()

5. 安全注意事项

5.1 风险评估

⚠️ Computer Use 是 Beta 功能,存在独特风险

风险类型描述缓解措施
数据泄露Claude 可能看到屏幕上的敏感信息使用隔离环境,避免敏感数据
恶意操作网页可能通过视觉欺骗指导 Claude域名白名单,限制访问
意外后果自动操作可能造成不可逆改变人工确认关键操作
提示注入网页内容可能覆盖用户指令谨慎对待网页任务

5.2 安全最佳实践

┌─────────────────────────────────────────────────────────────────┐
│                        安全防护层次                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  第一层:环境隔离                                                 │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │ • 使用专用虚拟机或 Docker 容器                           │    │
│  │ • 最小权限原则:不给予管理员权限                          │    │
│  │ • 不保存密码或敏感凭证                                   │    │
│  └─────────────────────────────────────────────────────────┘    │
│                                                                  │
│  第二层:网络限制                                                 │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │ • 域名白名单:只允许访问特定网站                          │    │
│  │ • 网络隔离:限制对内网资源的访问                          │    │
│  │ • 禁止下载执行未知程序                                   │    │
│  └─────────────────────────────────────────────────────────┘    │
│                                                                  │
│  第三层:人工审批                                                 │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │ • 关键操作需人工确认:                                    │    │
│  │   - 财务交易                                             │    │
│  │   - 接受服务条款                                          │    │
│  │   - 发送电子邮件                                          │    │
│  │   - 删除文件                                             │    │
│  └─────────────────────────────────────────────────────────┘    │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

6. 配置与优化

6.1 屏幕分辨率

推荐使用 XGA 分辨率(1024x768)以获得最佳模型性能:

bash
docker run \
  -e WIDTH=1024 \
  -e HEIGHT=768 \
  # ... 其他参数

6.2 持久化配置

挂载 ~/.anthropic/ 目录可以保存:

  • API 密钥
  • 自定义系统提示
  • 会话历史
bash
-v $HOME/.anthropic:/home/computeruse/.anthropic

6.3 模型选择

模型速度成本准确性推荐场景
Claude Opus 4.5最高复杂任务
Claude Sonnet 4.5通用推荐
Claude Haiku 4.5简单任务

7. 使用示例

7.1 基础任务

用户:打开 Firefox,搜索 "Anthropic Claude"

Claude 执行步骤:
1. 截取屏幕,识别桌面环境
2. 找到 Firefox 图标并点击
3. 等待浏览器打开
4. 在地址栏输入搜索内容
5. 按回车执行搜索
6. 报告结果

7.2 复杂任务

用户:创建一个包含今日日期的文本文件

Claude 执行步骤:
1. 打开终端
2. 执行命令:echo "Today is $(date)" > today.txt
3. 验证文件创建成功
4. 使用 cat 显示内容
5. 报告完成

8. 与其他方案对比

8.1 vs RPA 工具(UiPath、Automation Anywhere)

特性Computer Use传统 RPA
编程方式自然语言可视化流程/代码
适应性高(视觉理解)低(依赖选择器)
学习成本中高
稳定性中(Beta)
企业支持基础完善

8.2 vs Selenium/Playwright

特性Computer UseSelenium
定位方式视觉识别DOM 选择器
跨应用支持仅浏览器
维护成本中(选择器变化)
速度
错误恢复智能需编程

9. 总结

Computer Use Demo 展示了 Claude 独有的桌面控制能力:

方面评价
创新性⭐⭐⭐⭐⭐ 业界首创的视觉驱动桌面控制
实用性⭐⭐⭐ Beta 阶段,适合探索和原型
安全性⭐⭐ 需要谨慎使用,遵循最佳实践
部署难度⭐⭐⭐ Docker 容器化,易于启动

适用场景

  • 自动化重复性桌面任务
  • 跨应用工作流(非纯 Web)
  • 无障碍辅助技术
  • 软件测试自动化探索

限制与注意

  • Beta 功能,API 可能变化
  • 需要在隔离环境中运行
  • 复杂任务可能需要多次尝试
  • 不适合处理敏感信息

下一节,我们将学习 Browser Use Demo,了解更专注于浏览器自动化的实现方式。

基于 MIT 许可证发布。内容版权归作者所有。